
import { $t, i18n, getLanguageOptions } from 'src/i18n';

// 检查密码是否为空
export const validatePass = (value, callback) => {
	if (value === '') {
		callback($t('validate.required', { field: $t('common.password') }));
	} else {
		callback();
	}
};

/**
 * 校验新密码不能和旧密码一样
 * @param  {Object} rule     {传入的数据对象}
 * @param  {Object} value    {需要校验的value值}
 * @param  {function} callback {判断之后执行的回调}
 * @return {undefined}
 */
export const validateNewPwd = (rule, value, callback) => {
	if (value === '') {
		callback($t('validate.required', { field: $t('common.password') }));
	} else if (rule.pwd_info.formValidate.old_password === rule.pwd_info.formValidate.new_password) {
		callback($t()); // ss
	} else {
		callback();
	}
};

// 检查密码是否一致
export function validatePassCheck(rule, value, callback) {
	if (value === '') {
		callback($t('validate.required', { field: $t('common.new_password') }));
	} else if (rule.pwd_info.form_data.password !== value) {
		callback($t('validate.confirmed', { field: $t('common.new_password'), confirmedField: $t('common.origin_password') }));
	} else {
		callback();
	}
}

// 检查电话号码格式（包括手机和座机）
export const validatePhone = (rule, value, callback) => {
	if (value === '') {
		if (rule.validateType === 'create') {
			callback(new Error($t('validate.required', { field: $t('common.phone') })));
		} else {
			callback();
		}
	} else if (i18n.locale === 'zh-CN' && getLanguageOptions() === 'zh-CN') { // 中文
		if (!/^1[356789]\d{9}$/.test(value)) {
			if (!/^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/.test(value)) {
				callback(new Error($t('validate._default', { field: $t('common.phone') }))); // 电话号码无效
			} else {
				callback(); // 座机
			}
		} else {
			callback(); // 手机
		}
	} else { // 其他国家
		// if (!/^[0-9]*$/.test(value)) { //
		// 	callback(new Error($t('validate._default', { field: $t('common.phone') })));
		// 	return;
		// }
		callback();
	}
};

// 检查是否是数字
export const validateNumber = (rule, value, callback) => {
	if (value === '') {
		callback($t('validate.numeric', { field: '' }));
	} else if (!Number(value) && Number(value) !== 0) {
		callback($t('validate.numeric', { field: '' }));
	} else if (rule.maxValue) {
		if (parseInt(value, 10) > rule.maxValue) {
			callback($t('validate.max_value', { max: rule.maxValue, field: '' }));
		} else {
			callback();
		}
	} else {
		callback();
	}
};

// 检查是否选择了图片
export const validateImage = (rule, file, callback) => {
	let max_size;

	if (rule.maxSize) {
		max_size = rule.maxSize;
	} else {
		max_size = 2048;
	}

	if (!file || typeof file !== 'object') {
		callback($t('validate.image', { field: '' }));
	} else {
		const file_names_arr = file.name.split('.');

		const type = file_names_arr[file_names_arr.length - 1];

		if ('jpg jpeg png JPEG JPG PNG'.split(' ').indexOf(type) === -1) {
			callback($t('validate.regex', { field: $t('common.image') })); // jpg,jpeg,png
		} else if (parseFloat(file.size) / 1024 > max_size) {
			callback($t('validate.size', { field: $t('common.image'), size: `${max_size / 1024}M` })); // ` 图片大小不能超过${max_size / 1024}M！`
		} else {
			callback();
		}
	}
};

// 检查是否选择了文件
export const validateFile = (file, callback) => {
	if (!file || typeof file !== 'object') {
		callback($t('validate.required', { field: $t('common.file') }));
	} else {
		callback();
	}
};

// 检查是否选择了模型
export const validateModel = (file, callback) => {
	if (!file || typeof file !== 'object') {
		callback($t('validate.required', { field: $t('common.model') }));
	} else {
		callback();
	}
};

// 校验更新图片
export const validateUpdateImage = (rule, file, callback) => {
	let max_size;

	if (rule.maxSize) {
		max_size = rule.maxSize;
	} else {
		max_size = 1536;
	}

	if (file && typeof file === 'object') {
		const file_names_arr = file.name.split('.');

		const type = file_names_arr[file_names_arr.length - 1];

		if ('jpg jpeg png JPEG JPG PNG'.split(' ').indexOf(type) === -1) {
			callback($t('validate.regex', { field: $t('common.image') })); // '只能选择文件后缀为jpg,jpeg,png的图片！'
		} else if (parseFloat(file.size) / 1024 > max_size) {
			callback($t('validate.size', { field: $t('common.image'), size: `${max_size / 1024}M` })); // `图片大小不能超过${max_size / 1024}M！`
		} else {
			callback();
		}
	} else {
		callback();
	}
};

// 检查城市是否为空
export const validateCityCheck = (value, callback) => {
	if (value.length === 0) {
		callback($t('validate.required', { field: $t('common.city') })); // '城市不能为空'
	} else {
		callback();
	}
};

// 检查多选是否为空
export const validateMulti = (value, callback) => {
	if (value.length === 0) {
		callback($t('validate.required', { field: '' })); // 必填
	} else {
		callback();
	}
};

// 检查数组里面每个对象的值是否为空
export const validateArrayValue = (rule, value, callback) => {
	if (value.length === 0) {
		callback($t('validate.required', { field: rule.name })); // `存有未填${rule.name}值`
	} else if (!value.every(a => a.name)) {
		callback($t('validate.required', { field: rule.name })); // `存有未填${rule.name}值`
	} else {
		callback();
	}
};

// 检查数量是否大于零
export const validateCount = (value, callback) => {
	if (value < 0.01) {
		callback($t('validate.required', { field: '大于零' })); // 必填
	} else {
		callback();
	}
};
